# JVM 基础 快速入门

## 1. 概述

JVM（Java Virtual Machine）是 Java 虚拟机规范，定义了虚拟机的功能和行为标准。本文列出了遵循此规范的主要商业及开源实现产品，并对 JVM 的核心概念进行梳理。其中 HotSpot 作为最主流的 JVM 实现，最初由 Sun Microsystems 开发，现由 Oracle 主导维护，已成为整个 Java 生态的基石。

## 2. JVM 实现对比

| JVM 实现        | 最新版本 | 许可证     | 关键实现                           | 主要特点                         | 适用场景              | 性能表现               | 内存管理                      | 社区活跃度 |
| --------------- | -------- | ---------- | ---------------------------------- | -------------------------------- | --------------------- | ---------------------- | ----------------------------- | ---------- |
| OpenJDK         | 21 LTS   | GPLv2+CE   | HotSpot（参考实现）                | 官方参考实现，功能全面           | 企业级应用、云原生    | 优秀（ZGC/Shenandoah） | 多种 GC 算法可选              | 非常高     |
| Oracle JDK      | 21       | Oracle TLA | HotSpot（Oracle 优化版）           | 商业特性，性能优化，JFR 深度集成 | 商业项目、Oracle 生态 | 优秀，企业级调优       | G1/ZGC 为主，企业级监控       | 高         |
| Eclipse Temurin | 21.0.1   | GPLv2+CE   | HotSpot（TCK 认证版）              | 高质量构建，TCK 认证，完全兼容   | 企业生产环境          | 稳定可靠，100%兼容     | 多种 GC 支持，生产环境验证    | 高         |
| Amazon Corretto | 21.0.1   | GPLv2+CE   | HotSpot（AWS 优化版）              | 亚马逊优化，长期支持，云原生优化 | AWS 环境、云应用      | 云环境优化，容器友好   | 低延迟 GC，容器内存优化       | 高         |
| Azul Zulu       | 21.0.1   | GPLv2+CE   | HotSpot（Falcon JIT 优化版）       | 多平台支持，Falcon JIT 编译器    | 跨平台部署            | 良好，JIT 优化显著     | Falcon/JIT 优化，跨平台一致性 | 中高       |
| GraalVM         | 23.0.1   | GPLv2+CE   | GraalVM（基于 HotSpot 的创新架构） | AOT 编译，多语言                 | 微服务、Native Image  | 启动速度快             | 自定义内存管理                | 高         |
| IBM Semeru      | 21.0.0   | Eclipse    | OpenJ9（独立实现）                 | OpenJ9 VM，低内存，快速启动      | 容器化、内存敏感场景  | 低内存占用，启动快     | OpenJ9 GC（GenCon, Balanced） | 中         |

**核心洞察：** 由上表可以看出，Java 语言的核心优势之一在于其“一次编写，到处运行”的能力，这通过 JVM 规范 与 具体实现 的分离来实现。虽然存在多个 JVM 实现（如 OpenJ9），但 HotSpot 凭借其优异的性能和广泛的生态支持，成为了事实上的标准，也是 JVM 学习的重点。

## 3. JVM 规范核心要点

虽然市场上存在多个 JVM 实现产品，但它们都会通过 Java SE TCK (技术兼容性工具包) 的认证。这个测试套件就是用来验证一个 JVM 实现是否完全符合《Java 语言规范》和《Java 虚拟机规范》的。掌握这一规范，就等于掌握了相关版本的不同 JVM 实现。

### JVM 规范学习指南

虽然市场上存在多个 JVM 实现产品，但它们都遵循统一的 **JVM 标准规范**。掌握这一规范，就等于掌握了所有 Java 虚拟机的**核心概念架构**。

**重要说明**：

> **架构稳定性**：虽然不同 JDK 版本在具体实现技术上不断演进，但 **JVM 规范定义的核心概念架构始终保持稳定**。类加载、内存管理、字节码执行、垃圾回收这四大核心模块以及它们之间的协作关系，构成了 JVM 不变的**概念基础**。
>
> **版本差异提示**：请注意不同 JDK 版本在方法区实现（PermGen → Metaspace）、字符串常量池位置、垃圾回收算法等方面存在差异，这些是**在统一概念架构下的实现技术优化**。
>
> **学习价值**：掌握 JVM 规范的核心概念架构，能够理解所有版本 JVM 的**设计原理和工作机制**，具体版本的差异体现为在相同架构下的**性能优化和功能增强**。

本节将旨在建立 JVM 的整体的快速认知，《Java 虚拟机规范》通常会随着 JDK 主要版本的发布而一同更新。每一个新的 Java SE 平台版本发布时，其对应的《Java 虚拟机规范》也会更新到相应版本，这份表格清晰地梳理了从 JDK 6 到 JDK 25 的关键 JVM 演进脉络。关于 JVM 规范的完整学习请参照 [JVM 完整指南](/blog/java-stack/jvm/jvm-spec-guide/)

| 发布年份 | 官方名称 | 历史叫法 | 说明                           | JVM 重要变革                                                                         |
| -------- | -------- | -------- | ------------------------------ | ------------------------------------------------------------------------------------ |
| 2006 年  | JDK 6    | Java 1.6 | 从 1.5 开始官方提倡省略"1."    | - 早期内存模型<br/>- 基础 GC 算法                                                    |
| 2011 年  | JDK 7    | Java 1.7 | 但民间仍习惯 1.x 叫法          | **🚀 字符串常量池移至堆**<br/>- PermGen 开始标记废弃                                 |
| 2014 年  | JDK 8    | Java 1.8 | **最后一个使用 1.x 的版本**    | **🔥 完全移除 PermGen**<br/>**🔥 引入 Metaspace**<br/>- Lambda 表达式支持            |
| 2017 年  | JDK 9    | Java 9   | **从 9 开始完全弃用 1.x 前缀** | **🚀 模块化系统 (Jigsaw)**<br/>- 类加载器体系变更<br/>- G1 成为默认 GC               |
| 2018 年  | JDK 11   | Java 11  | LTS 版本                       | **🔥 ZGC 引入 (实验性)**<br/>- Epsilon 无操作 GC<br/>- 飞行记录器开源                |
| 2021 年  | JDK 17   | Java 17  | 当前 LTS 版本                  | **🚀 ZGC/Shenandoah 生产就绪**<br/>- 密封类<br/>- 模式匹配增强                       |
| 2023 年  | JDK 21   | Java 21  | 最新 LTS 版本                  | **🔥 虚拟线程 (Loom)**<br/>- 分代 ZGC<br/>- 记录模式                                 |
| 2024 年  | JDK 23   | Java 23  | 短期支持版本                   | **🚀 Region Pinning for G1**<br/>- 优化 G1 在本地代码临界区的暂停时间                |
| 2025 年  | JDK 25   | Java 25  | 计划中的短期支持版本           | **🔥 准备将 Lambda 状态的反射处理从 ASM 迁移到 JDK 内部**<br/>- 持续性能与稳定性提升 |
